package plugins.order;

import kd.bos.bill.BillShowParameter;
import kd.bos.cache.CacheFactory;
import kd.bos.cache.DistributeSessionlessCache;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.LocaleString;
import kd.bos.dataentity.entity.OrmLocaleValue;
import kd.bos.dataentity.serialization.SerializationUtils;
import kd.bos.entity.datamodel.ListSelectedRow;
import kd.bos.entity.datamodel.ListSelectedRowCollection;
import kd.bos.form.ShowType;
import kd.bos.form.control.events.ItemClickEvent;
import kd.bos.list.BillList;
import kd.bos.list.ListShowParameter;
import kd.bos.list.plugin.AbstractListPlugin;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.sdk.plugin.Plugin;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 标准单据列表插件
 */
public class toTakeaway extends AbstractListPlugin implements Plugin {

    public void itemClick(ItemClickEvent e) {
        super.itemClick(e);

        // 检测到点击事件
        if (e.getItemKey().equalsIgnoreCase("dcb4_takeaway")){

            // 获取当前列表选中行
            BillList billList = this.getView().getControl("billlistap");
            ListSelectedRowCollection selectedRows = billList.getSelectedRows();

            // 如果没有选中数据行
            if (selectedRows.isEmpty()) {

                this.getView().showMessage("请选择菜品");

            } else {

                // 创建缓存
                DistributeSessionlessCache cache = CacheFactory.getCommonCacheFactory().getDistributeSessionlessCache("customRegion");

                // 创建数据结构存储多行数据
                List<Map<String, Object>> selecteddishes = new ArrayList<>();

                // 存储第一个选中行的商户名
                Object merchantId = null;

                // 遍历每行勾选数据
                for (ListSelectedRow row : selectedRows) {
                    Map<String, Object> rowData = new HashMap<>();

                    // 提取特定字段

                    // 如果有选中数据行，传递选中参数
                    Object pkValue = row.getPrimaryKeyValue();

                    // 根据主键加载完整的单据数据包
                    DynamicObject selectedData = BusinessDataServiceHelper.loadSingle(pkValue,"dcb4_dishes" );   // 替换为实际的单据实体标识，如"dcb4_merchantdata"

                    // 获取商户名
                    merchantId = selectedData.get("dcb4_merchant.id"); // 商户数据

                    Object dishesID = row.getPrimaryKeyValue();     //
                    Object price = selectedData.get("dcb4_price"); // 单价

                    rowData.put("dishesID", dishesID);  // 菜名
                    rowData.put("price", price);  // 单价

                    // 添加主键用于后续操作
                    rowData.put("pkId", row.getPrimaryKeyValue());

                    selecteddishes.add(rowData);
                }

                // 序列化为 JSON 字符串并存入缓存
                String selecteddishesdata = SerializationUtils.toJsonString(selecteddishes);
                String orderedmerchantid = SerializationUtils.toJsonString(merchantId);

                cache.put("selecteddishesdata", selecteddishesdata);
                cache.put("orderedmerchantid", orderedmerchantid); // 存储第一个选中行的主键值
                cache.put("model", "takeaway"); // 存储标签值


                // 打开目标页面
                BillShowParameter billShowParameter = new BillShowParameter();
                billShowParameter.setFormId("dcb4_order_history");
                billShowParameter.getOpenStyle().setShowType(ShowType.Modal);
                // 打开单据
                this.getView().showForm(billShowParameter);

            }
        }
    }

}